home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Chat & Communication / Digsby build 37 / digsby_setup.exe / lib / contacts / Contact.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2008-10-13  |  7KB  |  197 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. import sys
  5. import traceback
  6. from util import isiterable, callsback
  7. from common.actions import action, ObservableActionMeta
  8. from common import profile
  9. from BuddyListElement import BuddyListElement
  10. from logging import getLogger
  11. log = getLogger('Contact')
  12. objget = object.__getattribute__
  13. CONTACT_ATTRS = set([
  14.     'id',
  15.     'buddy',
  16.     'remove',
  17.     'watched',
  18.     '__repr__',
  19.     'rename_gui',
  20.     'rename',
  21.     'edit_alerts',
  22.     'alias',
  23.     'get_group',
  24.     'move_to_group__getattr__',
  25.     '__hash__',
  26.     '__cmp__',
  27.     'sort'])
  28.  
  29. class Contact(object):
  30.     watched = 'online '.split()
  31.     __metaclass__ = ObservableActionMeta
  32.     
  33.     def __init__(self, buddy, id):
  34.         self.buddy = buddy
  35.         self.id = id
  36.         self._metacontact = None
  37.  
  38.     
  39.     def remove(self):
  40.         self.protocol.remove_buddy(self.id)
  41.  
  42.     
  43.     def _compatible_accounts(self):
  44.         is_compatible = is_compatible
  45.         import common.protocolmeta
  46.         result = []
  47.         for account in profile.connected_accounts:
  48.             if is_compatible(account.protocol, self.buddy.service):
  49.                 result.append(account)
  50.                 continue
  51.         
  52.         return result
  53.  
  54.     
  55.     def _all_buddies(self):
  56.         result = []
  57.         for account in self._compatible_accounts():
  58.             if account.connection:
  59.                 buddy = account.connection.get_buddy(self.buddy.name)
  60.                 if buddy is not None:
  61.                     result.append(buddy)
  62.                 
  63.             buddy is not None
  64.         
  65.         return result
  66.  
  67.     
  68.     def _is_blocked(self):
  69.         return all((lambda .0: for buddy in .0:
  70. buddy.blocked)(self._all_buddies()))
  71.  
  72.     blocked = property(_is_blocked)
  73.     
  74.     def _block_pred(self, block = True, **k):
  75.         return None if bool(block) ^ self._is_blocked() else None
  76.  
  77.     
  78.     def _unblock_pred(self, *a, **k):
  79.         return None if self._is_blocked() else None
  80.  
  81.     
  82.     def block(self, block = True, **k):
  83.         for buddy in self._all_buddies():
  84.             if bool(block) ^ bool(buddy.blocked):
  85.                 buddy.block(block, **k)
  86.                 continue
  87.         
  88.  
  89.     block = action(_block_pred)(block)
  90.     
  91.     def unblock(self, *a, **k):
  92.         self.block(False, *a, **k)
  93.  
  94.     unblock = action(_unblock_pred)(unblock)
  95.     
  96.     def rename_gui(self):
  97.         GetTextFromUser = GetTextFromUser
  98.         import gui.toolbox
  99.         localalias = self.alias
  100.         if localalias is None:
  101.             localalias = ''
  102.         
  103.         s = GetTextFromUser(_('Enter an alias for %s:' % self.name), caption = _('Rename %s' % self.name), default_value = localalias)
  104.         if s is not None:
  105.             if s == '' or s.strip():
  106.                 None(self.rename if s else None)
  107.                 return s
  108.             
  109.         
  110.  
  111.     rename_gui = action()(rename_gui)
  112.     
  113.     def rename(self, new_alias):
  114.         log.info('setting alias for %r to %r', self, new_alias)
  115.         profile.set_contact_info(self, 'alias', new_alias)
  116.         self.buddy.notify('alias')
  117.  
  118.     
  119.     def edit_alerts(self):
  120.         import gui.pref.prefsdialog as prefsdialog
  121.         prefsdialog.show('notifications')
  122.  
  123.     edit_alerts = action()(edit_alerts)
  124.     
  125.     def alias(self):
  126.         a = profile.get_contact_info(self, 'alias')
  127.         if a:
  128.             return a
  129.         
  130.         for attr in ('local_alias', 'remote_alias', 'nice_name'):
  131.             
  132.             try:
  133.                 a = getattr(self, attr, None)
  134.             except Exception:
  135.                 traceback.print_exc()
  136.                 continue
  137.  
  138.             if a:
  139.                 return a
  140.                 continue
  141.         
  142.         return self.name
  143.  
  144.     alias = property(alias)
  145.     
  146.     def get_group(self):
  147.         g = self.protocol.group_for(self)
  148.         return g
  149.  
  150.     
  151.     def move_to_group(self, groupname, index = 0, callback = None):
  152.         if not isinstance(groupname, basestring):
  153.             raise TypeError, 'groupname must be a string: %r' % groupname
  154.         
  155.         self.protocol.move_buddy_creating_group(self, groupname, self.get_group(), index, callback = callback)
  156.  
  157.     move_to_group = callsback(move_to_group)
  158.     
  159.     def __getattr__(self, attr):
  160.         if attr in CONTACT_ATTRS:
  161.             return objget(self, attr)
  162.         else:
  163.             return getattr(objget(self, 'buddy'), attr)
  164.  
  165.     
  166.     def __repr__(self):
  167.         return '<%s %s>' % (self.__class__.__name__, self.buddy)
  168.  
  169.     
  170.     def __hash__(self):
  171.         return hash('%s_%s' % (self.idstr(), self.id))
  172.  
  173.     
  174.     def __cmp__(self, other):
  175.         if self is other:
  176.             return 0
  177.         else:
  178.             return cmp((self.buddy, self.id), (getattr(other, 'buddy', None), getattr(other, 'id', None)))
  179.  
  180.     
  181.     def sort(self, *a, **k):
  182.         pass
  183.  
  184.  
  185.  
  186. class ContactCapabilities:
  187.     INFO = 'INFO'
  188.     IM = 'IM'
  189.     FILES = 'FILES'
  190.     PICTURES = 'PICTURES'
  191.     SMS = 'SMS'
  192.     BLOCKABLE = 'BLOCKABLE'
  193.     EMAIL = 'EMAIL'
  194.     BOT = 'BOT'
  195.     VIDEO = 'VIDEO'
  196.  
  197.